<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>find_data_code_2d [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_identification.html">Identification</a> / <a href="toc_identification_datacode.html">Data Code</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">find_data_code_2d</span><span data-if="c" style="display:none;">T_find_data_code_2d</span><span data-if="cpp" style="display:none;">FindDataCode2d</span><span data-if="dotnet" style="display:none;">FindDataCode2d</span><span data-if="python" style="display:none;">find_data_code_2d</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">find_data_code_2d</span><span data-if="c" style="display:none;">T_find_data_code_2d</span><span data-if="cpp" style="display:none;">FindDataCode2d</span><span data-if="dotnet" style="display:none;">FindDataCode2d</span><span data-if="python" style="display:none;">find_data_code_2d</span></code> — Detect and read 2D data code symbols in an image or
train the 2D data code model.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>find_data_code_2d</b>(<a href="#Image"><i>Image</i></a> : <a href="#SymbolXLDs"><i>SymbolXLDs</i></a> : <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, <a href="#GenParamName"><i>GenParamName</i></a>, <a href="#GenParamValue"><i>GenParamValue</i></a> : <a href="#ResultHandles"><i>ResultHandles</i></a>, <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>)</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>T_find_data_code_2d</b>(const Hobject <a href="#Image"><i>Image</i></a>, Hobject* <a href="#SymbolXLDs"><i>SymbolXLDs</i></a>, const Htuple <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, const Htuple <a href="#GenParamName"><i>GenParamName</i></a>, const Htuple <a href="#GenParamValue"><i>GenParamValue</i></a>, Htuple* <a href="#ResultHandles"><i>ResultHandles</i></a>, Htuple* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>FindDataCode2d</b>(const HObject&amp; <a href="#Image"><i>Image</i></a>, HObject* <a href="#SymbolXLDs"><i>SymbolXLDs</i></a>, const HTuple&amp; <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>, HTuple* <a href="#ResultHandles"><i>ResultHandles</i></a>, HTuple* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>)</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HDataCode2D.html">HDataCode2D</a>::<b>FindDataCode2d</b>(const HImage&amp; <a href="#Image"><i>Image</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>, HTuple* <a href="#ResultHandles"><i>ResultHandles</i></a>, HTuple* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HDataCode2D.html">HDataCode2D</a>::<b>FindDataCode2d</b>(const HImage&amp; <a href="#Image"><i>Image</i></a>, const HString&amp; <a href="#GenParamName"><i>GenParamName</i></a>, Hlong <a href="#GenParamValue"><i>GenParamValue</i></a>, Hlong* <a href="#ResultHandles"><i>ResultHandles</i></a>, HString* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HDataCode2D.html">HDataCode2D</a>::<b>FindDataCode2d</b>(const HImage&amp; <a href="#Image"><i>Image</i></a>, const char* <a href="#GenParamName"><i>GenParamName</i></a>, Hlong <a href="#GenParamValue"><i>GenParamValue</i></a>, Hlong* <a href="#ResultHandles"><i>ResultHandles</i></a>, HString* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HDataCode2D.html">HDataCode2D</a>::<b>FindDataCode2d</b>(const HImage&amp; <a href="#Image"><i>Image</i></a>, const wchar_t* <a href="#GenParamName"><i>GenParamName</i></a>, Hlong <a href="#GenParamValue"><i>GenParamValue</i></a>, Hlong* <a href="#ResultHandles"><i>ResultHandles</i></a>, HString* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const  <span class="signnote">
            (
            Windows only)
          </span></code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HImage.html">HImage</a>::<b>FindDataCode2d</b>(const HDataCode2D&amp; <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>, HTuple* <a href="#ResultHandles"><i>ResultHandles</i></a>, HTuple* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HImage.html">HImage</a>::<b>FindDataCode2d</b>(const HDataCode2D&amp; <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, const HString&amp; <a href="#GenParamName"><i>GenParamName</i></a>, Hlong <a href="#GenParamValue"><i>GenParamValue</i></a>, Hlong* <a href="#ResultHandles"><i>ResultHandles</i></a>, HString* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HImage.html">HImage</a>::<b>FindDataCode2d</b>(const HDataCode2D&amp; <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, const char* <a href="#GenParamName"><i>GenParamName</i></a>, Hlong <a href="#GenParamValue"><i>GenParamValue</i></a>, Hlong* <a href="#ResultHandles"><i>ResultHandles</i></a>, HString* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HImage.html">HImage</a>::<b>FindDataCode2d</b>(const HDataCode2D&amp; <a href="#DataCodeHandle"><i>DataCodeHandle</i></a>, const wchar_t* <a href="#GenParamName"><i>GenParamName</i></a>, Hlong <a href="#GenParamValue"><i>GenParamValue</i></a>, Hlong* <a href="#ResultHandles"><i>ResultHandles</i></a>, HString* <a href="#DecodedDataStrings"><i>DecodedDataStrings</i></a>) const  <span class="signnote">
            (
            Windows only)
          </span></code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>FindDataCode2d</b>(<a href="HObject.html">HObject</a> <a href="#Image"><i>image</i></a>, out <a href="HObject.html">HObject</a> <a href="#SymbolXLDs"><i>symbolXLDs</i></a>, <a href="HTuple.html">HTuple</a> <a href="#DataCodeHandle"><i>dataCodeHandle</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#ResultHandles"><i>resultHandles</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#DecodedDataStrings"><i>decodedDataStrings</i></a>)</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HDataCode2D.html">HDataCode2D</a>.<b>FindDataCode2d</b>(<a href="HImage.html">HImage</a> <a href="#Image"><i>image</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#ResultHandles"><i>resultHandles</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#DecodedDataStrings"><i>decodedDataStrings</i></a>)</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HDataCode2D.html">HDataCode2D</a>.<b>FindDataCode2d</b>(<a href="HImage.html">HImage</a> <a href="#Image"><i>image</i></a>, string <a href="#GenParamName"><i>genParamName</i></a>, int <a href="#GenParamValue"><i>genParamValue</i></a>, out int <a href="#ResultHandles"><i>resultHandles</i></a>, out string <a href="#DecodedDataStrings"><i>decodedDataStrings</i></a>)</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HImage.html">HImage</a>.<b>FindDataCode2d</b>(<a href="HDataCode2D.html">HDataCode2D</a> <a href="#DataCodeHandle"><i>dataCodeHandle</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#ResultHandles"><i>resultHandles</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#DecodedDataStrings"><i>decodedDataStrings</i></a>)</code></p>
<p>
<code><a href="HXLDCont.html">HXLDCont</a> <a href="HImage.html">HImage</a>.<b>FindDataCode2d</b>(<a href="HDataCode2D.html">HDataCode2D</a> <a href="#DataCodeHandle"><i>dataCodeHandle</i></a>, string <a href="#GenParamName"><i>genParamName</i></a>, int <a href="#GenParamValue"><i>genParamValue</i></a>, out int <a href="#ResultHandles"><i>resultHandles</i></a>, out string <a href="#DecodedDataStrings"><i>decodedDataStrings</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>find_data_code_2d</b>(<a href="#Image"><i>image</i></a>: HObject, <a href="#DataCodeHandle"><i>data_code_handle</i></a>: HHandle, <a href="#GenParamName"><i>gen_param_name</i></a>: MaybeSequence[str], <a href="#GenParamValue"><i>gen_param_value</i></a>: MaybeSequence[Union[int, float, str]]) -&gt; Tuple[HObject, Sequence[int], Sequence[str]]</code></p>
<p>
<code>def <b>find_data_code_2d_s</b>(<a href="#Image"><i>image</i></a>: HObject, <a href="#DataCodeHandle"><i>data_code_handle</i></a>: HHandle, <a href="#GenParamName"><i>gen_param_name</i></a>: MaybeSequence[str], <a href="#GenParamValue"><i>gen_param_value</i></a>: MaybeSequence[Union[int, float, str]]) -&gt; Tuple[HObject, int, str]</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p>该算子 <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> detects 2D data code symbols
in the input image (<a href="#Image"><i><code><span data-if="hdevelop" style="display:inline">Image</span><span data-if="c" style="display:none">Image</span><span data-if="cpp" style="display:none">Image</span><span data-if="com" style="display:none">Image</span><span data-if="dotnet" style="display:none">image</span><span data-if="python" style="display:none">image</span></code></i></a>) and reads the data that is encoded
in the symbol.
Before calling <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code>, a model of a class of 2D
data codes that matches the symbols in the images must be
created with <a href="create_data_code_2d_model.html"><code><span data-if="hdevelop" style="display:inline">create_data_code_2d_model</span><span data-if="c" style="display:none">create_data_code_2d_model</span><span data-if="cpp" style="display:none">CreateDataCode2dModel</span><span data-if="com" style="display:none">CreateDataCode2dModel</span><span data-if="dotnet" style="display:none">CreateDataCode2dModel</span><span data-if="python" style="display:none">create_data_code_2d_model</span></code></a> or
<a href="read_data_code_2d_model.html"><code><span data-if="hdevelop" style="display:inline">read_data_code_2d_model</span><span data-if="c" style="display:none">read_data_code_2d_model</span><span data-if="cpp" style="display:none">ReadDataCode2dModel</span><span data-if="com" style="display:none">ReadDataCode2dModel</span><span data-if="dotnet" style="display:none">ReadDataCode2dModel</span><span data-if="python" style="display:none">read_data_code_2d_model</span></code></a>.
The handle returned by these operators is passed to
<code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> in <a href="#DataCodeHandle"><i><code><span data-if="hdevelop" style="display:inline">DataCodeHandle</span><span data-if="c" style="display:none">DataCodeHandle</span><span data-if="cpp" style="display:none">DataCodeHandle</span><span data-if="com" style="display:none">DataCodeHandle</span><span data-if="dotnet" style="display:none">dataCodeHandle</span><span data-if="python" style="display:none">data_code_handle</span></code></i></a>.
To look for more than one symbol in an image, the generic parameter
<i><span data-if="hdevelop" style="display:inline">'stop_after_result_num'</span><span data-if="c" style="display:none">"stop_after_result_num"</span><span data-if="cpp" style="display:none">"stop_after_result_num"</span><span data-if="com" style="display:none">"stop_after_result_num"</span><span data-if="dotnet" style="display:none">"stop_after_result_num"</span><span data-if="python" style="display:none">"stop_after_result_num"</span></i> can be passed to
<a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> together with the number of requested
symbols as <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a>.
</p>
<p>As a result 该算子 returns for every successfully decoded
symbol the surrounding XLD contour (<a href="#SymbolXLDs"><i><code><span data-if="hdevelop" style="display:inline">SymbolXLDs</span><span data-if="c" style="display:none">SymbolXLDs</span><span data-if="cpp" style="display:none">SymbolXLDs</span><span data-if="com" style="display:none">SymbolXLDs</span><span data-if="dotnet" style="display:none">symbolXLDs</span><span data-if="python" style="display:none">symbol_xlds</span></code></i></a>), a
result handle, which refers to a candidate structure that stores
additional information about the symbol as well as the search and
decoding process (<a href="#ResultHandles"><i><code><span data-if="hdevelop" style="display:inline">ResultHandles</span><span data-if="c" style="display:none">ResultHandles</span><span data-if="cpp" style="display:none">ResultHandles</span><span data-if="com" style="display:none">ResultHandles</span><span data-if="dotnet" style="display:none">resultHandles</span><span data-if="python" style="display:none">result_handles</span></code></i></a>), and the string that is
encoded in the symbol (<a href="#DecodedDataStrings"><i><code><span data-if="hdevelop" style="display:inline">DecodedDataStrings</span><span data-if="c" style="display:none">DecodedDataStrings</span><span data-if="cpp" style="display:none">DecodedDataStrings</span><span data-if="com" style="display:none">DecodedDataStrings</span><span data-if="dotnet" style="display:none">decodedDataStrings</span><span data-if="python" style="display:none">decoded_data_strings</span></code></i></a>).
Passing the candidate handle from <a href="#ResultHandles"><i><code><span data-if="hdevelop" style="display:inline">ResultHandles</span><span data-if="c" style="display:none">ResultHandles</span><span data-if="cpp" style="display:none">ResultHandles</span><span data-if="com" style="display:none">ResultHandles</span><span data-if="dotnet" style="display:none">resultHandles</span><span data-if="python" style="display:none">result_handles</span></code></i></a> together
with the generic parameter <i><span data-if="hdevelop" style="display:inline">'decoded_data'</span><span data-if="c" style="display:none">"decoded_data"</span><span data-if="cpp" style="display:none">"decoded_data"</span><span data-if="com" style="display:none">"decoded_data"</span><span data-if="dotnet" style="display:none">"decoded_data"</span><span data-if="python" style="display:none">"decoded_data"</span></i>,
<a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a> returns a tuple with the ASCII code
of all characters of the string (see also
<a href="toc_tuple_stringoperations.html">Tuple / String Operations</a>).
</p>
<p>For an explanation of the concept of the 2D data code reader
see the introduction of chapter <a href="toc_identification_datacode.html">Identification / Data Code</a>.
</p>
<p>The symbol structure of GS1 DataMatrix, GS1 QR Code, GS1 Aztec Code,
and GS1 DotCode is identical to the structure of
Data Matrix ECC 200, QR Code, Aztec Code, and DotCode, respectively.
Therefore, all parameters, settings, and rules applying to Data Matrix
ECC 200, QR Code, Aztec Code, or DotCode apply to their GS1 variants as
well. The GS1 symbologies enforce merely additional rules for the format of
the data carried by the codes. The data has to be organized in so called GS1
application element strings according to the GS1 General Specifications.
For example, if the data code model <a href="#DataCodeHandle"><i><code><span data-if="hdevelop" style="display:inline">DataCodeHandle</span><span data-if="c" style="display:none">DataCodeHandle</span><span data-if="cpp" style="display:none">DataCodeHandle</span><span data-if="com" style="display:none">DataCodeHandle</span><span data-if="dotnet" style="display:none">dataCodeHandle</span><span data-if="python" style="display:none">data_code_handle</span></code></i></a> is created as
GS1 DataMatrix, then <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> only returns a result if
the underlying symbol is a valid Data Matrix ECC 200 symbol, and only if its
data conforms to the GS1 application element strings rules.
For the GS1 application element strings it is only checked if the
application identifiers exist in the GS1 General Specifications.
In contrast,
<code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> will return no results for Data Matrix ECC 200
containing general data. The same is valid for GS1 QR Code, GS1 Aztec Code,
and GS1 DotCode Code.
</p>
<p><b>Adjusting the model</b>
</p>
<p>If there is a symbol in the image that cannot be read, it should be
verified, whether the properties of the symbol fit the model parameters.
Special attention should be paid to
</p>
<ul>

<li>
<p> the correct polarity (<i><span data-if="hdevelop" style="display:inline">'polarity'</span><span data-if="c" style="display:none">"polarity"</span><span data-if="cpp" style="display:none">"polarity"</span><span data-if="com" style="display:none">"polarity"</span><span data-if="dotnet" style="display:none">"polarity"</span><span data-if="python" style="display:none">"polarity"</span></i>, light-on-dark or
dark-on-light),
</p>
</li>
<li>
<p> the symbol size (<i><span data-if="hdevelop" style="display:inline">'symbol_size'</span><span data-if="c" style="display:none">"symbol_size"</span><span data-if="cpp" style="display:none">"symbol_size"</span><span data-if="com" style="display:none">"symbol_size"</span><span data-if="dotnet" style="display:none">"symbol_size"</span><span data-if="python" style="display:none">"symbol_size"</span></i> for Data Matrix ECC 200,
Aztec Code, and DotCode),
</p>
</li>
<li>
<p> <i><span data-if="hdevelop" style="display:inline">'version'</span><span data-if="c" style="display:none">"version"</span><span data-if="cpp" style="display:none">"version"</span><span data-if="com" style="display:none">"version"</span><span data-if="dotnet" style="display:none">"version"</span><span data-if="python" style="display:none">"version"</span></i> for QR Code,
</p>
</li>
<li>
<p> <i><span data-if="hdevelop" style="display:inline">'format'</span><span data-if="c" style="display:none">"format"</span><span data-if="cpp" style="display:none">"format"</span><span data-if="com" style="display:none">"format"</span><span data-if="dotnet" style="display:none">"format"</span><span data-if="python" style="display:none">"format"</span></i> for Aztec Code,
</p>
</li>
<li>
<p> the module size (<i><span data-if="hdevelop" style="display:inline">'module_size'</span><span data-if="c" style="display:none">"module_size"</span><span data-if="cpp" style="display:none">"module_size"</span><span data-if="com" style="display:none">"module_size"</span><span data-if="dotnet" style="display:none">"module_size"</span><span data-if="python" style="display:none">"module_size"</span></i> for Data Matrix ECC 200,
QR Code, Micro QR Code, Aztec Code, and DotCode,
<i><span data-if="hdevelop" style="display:inline">'module_width'</span><span data-if="c" style="display:none">"module_width"</span><span data-if="cpp" style="display:none">"module_width"</span><span data-if="com" style="display:none">"module_width"</span><span data-if="dotnet" style="display:none">"module_width"</span><span data-if="python" style="display:none">"module_width"</span></i> and <i><span data-if="hdevelop" style="display:inline">'module_aspect'</span><span data-if="c" style="display:none">"module_aspect"</span><span data-if="cpp" style="display:none">"module_aspect"</span><span data-if="com" style="display:none">"module_aspect"</span><span data-if="dotnet" style="display:none">"module_aspect"</span><span data-if="python" style="display:none">"module_aspect"</span></i> for PDF417),
</p>
</li>
<li>
<p> the possibility of a mirroring of the symbol (<i><span data-if="hdevelop" style="display:inline">'mirrored'</span><span data-if="c" style="display:none">"mirrored"</span><span data-if="cpp" style="display:none">"mirrored"</span><span data-if="com" style="display:none">"mirrored"</span><span data-if="dotnet" style="display:none">"mirrored"</span><span data-if="python" style="display:none">"mirrored"</span></i>),
</p>
</li>
<li>
<p> and the specified minimum contrast (<i><span data-if="hdevelop" style="display:inline">'contrast_min'</span><span data-if="c" style="display:none">"contrast_min"</span><span data-if="cpp" style="display:none">"contrast_min"</span><span data-if="com" style="display:none">"contrast_min"</span><span data-if="dotnet" style="display:none">"contrast_min"</span><span data-if="python" style="display:none">"contrast_min"</span></i> for
Aztec Code, QR Code, and PDF417).
</p>
</li>
</ul>
<p>Further relevant parameters are the gap between neighboring
foreground modules and, for Data Matrix ECC 200, the maximum slant of the
L-shaped finder pattern (<i><span data-if="hdevelop" style="display:inline">'slant_max'</span><span data-if="c" style="display:none">"slant_max"</span><span data-if="cpp" style="display:none">"slant_max"</span><span data-if="com" style="display:none">"slant_max"</span><span data-if="dotnet" style="display:none">"slant_max"</span><span data-if="python" style="display:none">"slant_max"</span></i>).
The current settings for these parameters are returned by the
operator <a href="get_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_param</span><span data-if="c" style="display:none">get_data_code_2d_param</span><span data-if="cpp" style="display:none">GetDataCode2dParam</span><span data-if="com" style="display:none">GetDataCode2dParam</span><span data-if="dotnet" style="display:none">GetDataCode2dParam</span><span data-if="python" style="display:none">get_data_code_2d_param</span></code></a>.
If necessary, the corresponding model parameters can be adjusted with
<a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a>.
</p>
<p>It is recommended to adjust the model as well as possible to the
symbols in the images also for runtime reasons.
In general, the runtime of <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> is higher for
a more general model than for a more specific model.
One should take into account that a general model leads to a high
runtime especially if <em>no</em> valid data code can be found.
</p>
<p><b>Train the model</b>
</p>
<p>Besides setting the model parameters manually with
<a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a>, the model can also be trained with
<code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> based on one or several sample images.
For this, the generic parameter <i><span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></i> must be passed in
<a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a>.
The corresponding value passed in <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> determines
the model parameters that should be learned.
The following values are possible:
</p>
<ul>

<li>
<p> All data code types:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'all'</span><span data-if="c" style="display:none">"all"</span><span data-if="cpp" style="display:none">"all"</span><span data-if="com" style="display:none">"all"</span><span data-if="dotnet" style="display:none">"all"</span><span data-if="python" style="display:none">"all"</span></i>:</b></dt>
<dd>
<p>

All model parameters that can be trained.
</p>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'symbol_size'</span><span data-if="c" style="display:none">"symbol_size"</span><span data-if="cpp" style="display:none">"symbol_size"</span><span data-if="com" style="display:none">"symbol_size"</span><span data-if="dotnet" style="display:none">"symbol_size"</span><span data-if="python" style="display:none">"symbol_size"</span></i>:</b></dt>
<dd>
<p>

Size of the data code symbol.
</p>
<p>The model parameters trained for Data
Matrix ECC200, PDF417, and DotCode are
<i><span data-if="hdevelop" style="display:inline">'symbol_cols_min'</span><span data-if="c" style="display:none">"symbol_cols_min"</span><span data-if="cpp" style="display:none">"symbol_cols_min"</span><span data-if="com" style="display:none">"symbol_cols_min"</span><span data-if="dotnet" style="display:none">"symbol_cols_min"</span><span data-if="python" style="display:none">"symbol_cols_min"</span></i>, <i><span data-if="hdevelop" style="display:inline">'symbol_cols_max'</span><span data-if="c" style="display:none">"symbol_cols_max"</span><span data-if="cpp" style="display:none">"symbol_cols_max"</span><span data-if="com" style="display:none">"symbol_cols_max"</span><span data-if="dotnet" style="display:none">"symbol_cols_max"</span><span data-if="python" style="display:none">"symbol_cols_max"</span></i>,
<i><span data-if="hdevelop" style="display:inline">'symbol_rows_min'</span><span data-if="c" style="display:none">"symbol_rows_min"</span><span data-if="cpp" style="display:none">"symbol_rows_min"</span><span data-if="com" style="display:none">"symbol_rows_min"</span><span data-if="dotnet" style="display:none">"symbol_rows_min"</span><span data-if="python" style="display:none">"symbol_rows_min"</span></i>, and <i><span data-if="hdevelop" style="display:inline">'symbol_rows_max'</span><span data-if="c" style="display:none">"symbol_rows_max"</span><span data-if="cpp" style="display:none">"symbol_rows_max"</span><span data-if="com" style="display:none">"symbol_rows_max"</span><span data-if="dotnet" style="display:none">"symbol_rows_max"</span><span data-if="python" style="display:none">"symbol_rows_max"</span></i>.
Additionally, the model parameter <i><span data-if="hdevelop" style="display:inline">'symbol_shape'</span><span data-if="c" style="display:none">"symbol_shape"</span><span data-if="cpp" style="display:none">"symbol_shape"</span><span data-if="com" style="display:none">"symbol_shape"</span><span data-if="dotnet" style="display:none">"symbol_shape"</span><span data-if="python" style="display:none">"symbol_shape"</span></i> (square or
rectangular) is trained for Data Matrix ECC 200 only.
</p>
<p>For QR Code and Micro QR Code it is also possible to pass
<i><span data-if="hdevelop" style="display:inline">'version'</span><span data-if="c" style="display:none">"version"</span><span data-if="cpp" style="display:none">"version"</span><span data-if="com" style="display:none">"version"</span><span data-if="dotnet" style="display:none">"version"</span><span data-if="python" style="display:none">"version"</span></i>. The model parameters trained hereby are
<i><span data-if="hdevelop" style="display:inline">'symbol_size_min'</span><span data-if="c" style="display:none">"symbol_size_min"</span><span data-if="cpp" style="display:none">"symbol_size_min"</span><span data-if="com" style="display:none">"symbol_size_min"</span><span data-if="dotnet" style="display:none">"symbol_size_min"</span><span data-if="python" style="display:none">"symbol_size_min"</span></i>, <i><span data-if="hdevelop" style="display:inline">'symbol_size_max'</span><span data-if="c" style="display:none">"symbol_size_max"</span><span data-if="cpp" style="display:none">"symbol_size_max"</span><span data-if="com" style="display:none">"symbol_size_max"</span><span data-if="dotnet" style="display:none">"symbol_size_max"</span><span data-if="python" style="display:none">"symbol_size_max"</span></i>,
<i><span data-if="hdevelop" style="display:inline">'version_min'</span><span data-if="c" style="display:none">"version_min"</span><span data-if="cpp" style="display:none">"version_min"</span><span data-if="com" style="display:none">"version_min"</span><span data-if="dotnet" style="display:none">"version_min"</span><span data-if="python" style="display:none">"version_min"</span></i>, and <i><span data-if="hdevelop" style="display:inline">'version_max'</span><span data-if="c" style="display:none">"version_max"</span><span data-if="cpp" style="display:none">"version_max"</span><span data-if="com" style="display:none">"version_max"</span><span data-if="dotnet" style="display:none">"version_max"</span><span data-if="python" style="display:none">"version_max"</span></i>.
</p>
<p>The model parameters trained for Aztec Code are
<i><span data-if="hdevelop" style="display:inline">'symbol_size_min'</span><span data-if="c" style="display:none">"symbol_size_min"</span><span data-if="cpp" style="display:none">"symbol_size_min"</span><span data-if="com" style="display:none">"symbol_size_min"</span><span data-if="dotnet" style="display:none">"symbol_size_min"</span><span data-if="python" style="display:none">"symbol_size_min"</span></i> and <i><span data-if="hdevelop" style="display:inline">'symbol_size_max'</span><span data-if="c" style="display:none">"symbol_size_max"</span><span data-if="cpp" style="display:none">"symbol_size_max"</span><span data-if="com" style="display:none">"symbol_size_max"</span><span data-if="dotnet" style="display:none">"symbol_size_max"</span><span data-if="python" style="display:none">"symbol_size_max"</span></i>.
</p>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'module_size'</span><span data-if="c" style="display:none">"module_size"</span><span data-if="cpp" style="display:none">"module_size"</span><span data-if="com" style="display:none">"module_size"</span><span data-if="dotnet" style="display:none">"module_size"</span><span data-if="python" style="display:none">"module_size"</span></i>:</b></dt>
<dd>
<p>

Size of the modules.
The model parameters trained are <i><span data-if="hdevelop" style="display:inline">'module_size_min'</span><span data-if="c" style="display:none">"module_size_min"</span><span data-if="cpp" style="display:none">"module_size_min"</span><span data-if="com" style="display:none">"module_size_min"</span><span data-if="dotnet" style="display:none">"module_size_min"</span><span data-if="python" style="display:none">"module_size_min"</span></i> and
<i><span data-if="hdevelop" style="display:inline">'module_size_max'</span><span data-if="c" style="display:none">"module_size_max"</span><span data-if="cpp" style="display:none">"module_size_max"</span><span data-if="com" style="display:none">"module_size_max"</span><span data-if="dotnet" style="display:none">"module_size_max"</span><span data-if="python" style="display:none">"module_size_max"</span></i>.
</p>
<p>For PDF417 this includes the module width and the module
aspect ratio, so thereby the respective model parameters are
<i><span data-if="hdevelop" style="display:inline">'module_width_min'</span><span data-if="c" style="display:none">"module_width_min"</span><span data-if="cpp" style="display:none">"module_width_min"</span><span data-if="com" style="display:none">"module_width_min"</span><span data-if="dotnet" style="display:none">"module_width_min"</span><span data-if="python" style="display:none">"module_width_min"</span></i>, <i><span data-if="hdevelop" style="display:inline">'module_width_max'</span><span data-if="c" style="display:none">"module_width_max"</span><span data-if="cpp" style="display:none">"module_width_max"</span><span data-if="com" style="display:none">"module_width_max"</span><span data-if="dotnet" style="display:none">"module_width_max"</span><span data-if="python" style="display:none">"module_width_max"</span></i>,
<i><span data-if="hdevelop" style="display:inline">'module_aspect_min'</span><span data-if="c" style="display:none">"module_aspect_min"</span><span data-if="cpp" style="display:none">"module_aspect_min"</span><span data-if="com" style="display:none">"module_aspect_min"</span><span data-if="dotnet" style="display:none">"module_aspect_min"</span><span data-if="python" style="display:none">"module_aspect_min"</span></i>, and <i><span data-if="hdevelop" style="display:inline">'module_aspect_max'</span><span data-if="c" style="display:none">"module_aspect_max"</span><span data-if="cpp" style="display:none">"module_aspect_max"</span><span data-if="com" style="display:none">"module_aspect_max"</span><span data-if="dotnet" style="display:none">"module_aspect_max"</span><span data-if="python" style="display:none">"module_aspect_max"</span></i>.
</p>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'polarity'</span><span data-if="c" style="display:none">"polarity"</span><span data-if="cpp" style="display:none">"polarity"</span><span data-if="com" style="display:none">"polarity"</span><span data-if="dotnet" style="display:none">"polarity"</span><span data-if="python" style="display:none">"polarity"</span></i>:</b></dt>
<dd>
<p>

Polarity of the symbols, i.e. they may appear dark on a light
background or light on a dark background.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'polarity'</span><span data-if="c" style="display:none">"polarity"</span><span data-if="cpp" style="display:none">"polarity"</span><span data-if="com" style="display:none">"polarity"</span><span data-if="dotnet" style="display:none">"polarity"</span><span data-if="python" style="display:none">"polarity"</span></i>.
</p>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'mirrored'</span><span data-if="c" style="display:none">"mirrored"</span><span data-if="cpp" style="display:none">"mirrored"</span><span data-if="com" style="display:none">"mirrored"</span><span data-if="dotnet" style="display:none">"mirrored"</span><span data-if="python" style="display:none">"mirrored"</span></i>:</b></dt>
<dd>
<p>

Whether the symbols in the image are mirrored or not.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'mirrored'</span><span data-if="c" style="display:none">"mirrored"</span><span data-if="cpp" style="display:none">"mirrored"</span><span data-if="com" style="display:none">"mirrored"</span><span data-if="dotnet" style="display:none">"mirrored"</span><span data-if="python" style="display:none">"mirrored"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> Data Matrix ECC 200, Aztec Code, PDF417, QR Code, and Micro QR Code only:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'small_modules_robustness'</span><span data-if="c" style="display:none">"small_modules_robustness"</span><span data-if="cpp" style="display:none">"small_modules_robustness"</span><span data-if="com" style="display:none">"small_modules_robustness"</span><span data-if="dotnet" style="display:none">"small_modules_robustness"</span><span data-if="python" style="display:none">"small_modules_robustness"</span></i>:</b></dt>
<dd>
<p>

Robustness of the decoding of data codes with very small
module sizes. This parameter is not trained for DotCode.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'small_modules_robustness'</span><span data-if="c" style="display:none">"small_modules_robustness"</span><span data-if="cpp" style="display:none">"small_modules_robustness"</span><span data-if="com" style="display:none">"small_modules_robustness"</span><span data-if="dotnet" style="display:none">"small_modules_robustness"</span><span data-if="python" style="display:none">"small_modules_robustness"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> Aztec Code, PDF417, QR Code, and Micro QR Code only:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'contrast'</span><span data-if="c" style="display:none">"contrast"</span><span data-if="cpp" style="display:none">"contrast"</span><span data-if="com" style="display:none">"contrast"</span><span data-if="dotnet" style="display:none">"contrast"</span><span data-if="python" style="display:none">"contrast"</span></i>:</b></dt>
<dd>
<p>

Minimum contrast for detecting the symbols.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'contrast_min'</span><span data-if="c" style="display:none">"contrast_min"</span><span data-if="cpp" style="display:none">"contrast_min"</span><span data-if="com" style="display:none">"contrast_min"</span><span data-if="dotnet" style="display:none">"contrast_min"</span><span data-if="python" style="display:none">"contrast_min"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> All data code types except PDF417::
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'module_shape'</span><span data-if="c" style="display:none">"module_shape"</span><span data-if="cpp" style="display:none">"module_shape"</span><span data-if="com" style="display:none">"module_shape"</span><span data-if="dotnet" style="display:none">"module_shape"</span><span data-if="python" style="display:none">"module_shape"</span></i>:</b></dt>
<dd>
<p>

Whether there is a gap between neighboring foreground modules or
whether they are connected.
The model parameters trained are <i><span data-if="hdevelop" style="display:inline">'module_gap_min'</span><span data-if="c" style="display:none">"module_gap_min"</span><span data-if="cpp" style="display:none">"module_gap_min"</span><span data-if="com" style="display:none">"module_gap_min"</span><span data-if="dotnet" style="display:none">"module_gap_min"</span><span data-if="python" style="display:none">"module_gap_min"</span></i> and
<i><span data-if="hdevelop" style="display:inline">'module_gap_max'</span><span data-if="c" style="display:none">"module_gap_max"</span><span data-if="cpp" style="display:none">"module_gap_max"</span><span data-if="com" style="display:none">"module_gap_max"</span><span data-if="dotnet" style="display:none">"module_gap_max"</span><span data-if="python" style="display:none">"module_gap_max"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> Data Matrix ECC 200 and Aztec Code only:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'finder_pattern_tolerance'</span><span data-if="c" style="display:none">"finder_pattern_tolerance"</span><span data-if="cpp" style="display:none">"finder_pattern_tolerance"</span><span data-if="com" style="display:none">"finder_pattern_tolerance"</span><span data-if="dotnet" style="display:none">"finder_pattern_tolerance"</span><span data-if="python" style="display:none">"finder_pattern_tolerance"</span></i>:</b></dt>
<dd>
<p>

The allowed tolerance of the symbol search with respect to
a defect or partially occluded finder pattern.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'finder_pattern_tolerance'</span><span data-if="c" style="display:none">"finder_pattern_tolerance"</span><span data-if="cpp" style="display:none">"finder_pattern_tolerance"</span><span data-if="com" style="display:none">"finder_pattern_tolerance"</span><span data-if="dotnet" style="display:none">"finder_pattern_tolerance"</span><span data-if="python" style="display:none">"finder_pattern_tolerance"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> Data Matrix ECC 200 and DotCode only:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'candidate_selection'</span><span data-if="c" style="display:none">"candidate_selection"</span><span data-if="cpp" style="display:none">"candidate_selection"</span><span data-if="com" style="display:none">"candidate_selection"</span><span data-if="dotnet" style="display:none">"candidate_selection"</span><span data-if="python" style="display:none">"candidate_selection"</span></i>:</b></dt>
<dd>
<p>

Selection of candidate regions to be processed.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'candidate_selection'</span><span data-if="c" style="display:none">"candidate_selection"</span><span data-if="cpp" style="display:none">"candidate_selection"</span><span data-if="com" style="display:none">"candidate_selection"</span><span data-if="dotnet" style="display:none">"candidate_selection"</span><span data-if="python" style="display:none">"candidate_selection"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> Data Matrix ECC 200 only:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'contrast_tolerance'</span><span data-if="c" style="display:none">"contrast_tolerance"</span><span data-if="cpp" style="display:none">"contrast_tolerance"</span><span data-if="com" style="display:none">"contrast_tolerance"</span><span data-if="dotnet" style="display:none">"contrast_tolerance"</span><span data-if="python" style="display:none">"contrast_tolerance"</span></i>:</b></dt>
<dd>
<p>

The tolerance of the symbol search with respect to strong
local contrast variations.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'contrast_tolerance'</span><span data-if="c" style="display:none">"contrast_tolerance"</span><span data-if="cpp" style="display:none">"contrast_tolerance"</span><span data-if="com" style="display:none">"contrast_tolerance"</span><span data-if="dotnet" style="display:none">"contrast_tolerance"</span><span data-if="python" style="display:none">"contrast_tolerance"</span></i>.
</p>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'module_grid'</span><span data-if="c" style="display:none">"module_grid"</span><span data-if="cpp" style="display:none">"module_grid"</span><span data-if="com" style="display:none">"module_grid"</span><span data-if="dotnet" style="display:none">"module_grid"</span><span data-if="python" style="display:none">"module_grid"</span></i>:</b></dt>
<dd>
<p>

Algorithm for calculating the module positions
(fixed or variable grid).
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'module_grid'</span><span data-if="c" style="display:none">"module_grid"</span><span data-if="cpp" style="display:none">"module_grid"</span><span data-if="com" style="display:none">"module_grid"</span><span data-if="dotnet" style="display:none">"module_grid"</span><span data-if="python" style="display:none">"module_grid"</span></i>.
</p>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'image_proc'</span><span data-if="c" style="display:none">"image_proc"</span><span data-if="cpp" style="display:none">"image_proc"</span><span data-if="com" style="display:none">"image_proc"</span><span data-if="dotnet" style="display:none">"image_proc"</span><span data-if="python" style="display:none">"image_proc"</span></i>:</b></dt>
<dd>
<p>

Adjusting different internal image processing parameters.
Until now, only the maximum slant of the L-shaped finder
pattern of the Data Matrix ECC 200 symbols is set (more parameters
may follow in future).
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'slant_max'</span><span data-if="c" style="display:none">"slant_max"</span><span data-if="cpp" style="display:none">"slant_max"</span><span data-if="com" style="display:none">"slant_max"</span><span data-if="dotnet" style="display:none">"slant_max"</span><span data-if="python" style="display:none">"slant_max"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> QR Code only:
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'model_type'</span><span data-if="c" style="display:none">"model_type"</span><span data-if="cpp" style="display:none">"model_type"</span><span data-if="com" style="display:none">"model_type"</span><span data-if="dotnet" style="display:none">"model_type"</span><span data-if="python" style="display:none">"model_type"</span></i>:</b></dt>
<dd>
<p>

Whether the QR Code symbols follow the Model 1 or Model 2
specification.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'model_type'</span><span data-if="c" style="display:none">"model_type"</span><span data-if="cpp" style="display:none">"model_type"</span><span data-if="com" style="display:none">"model_type"</span><span data-if="dotnet" style="display:none">"model_type"</span><span data-if="python" style="display:none">"model_type"</span></i>.
</p>
</dd>
</dl>

</li>
<li>
<p> Aztec Code only
</p>
<dl class="generic">


<dt><b><i><span data-if="hdevelop" style="display:inline">'additional_levels'</span><span data-if="c" style="display:none">"additional_levels"</span><span data-if="cpp" style="display:none">"additional_levels"</span><span data-if="com" style="display:none">"additional_levels"</span><span data-if="dotnet" style="display:none">"additional_levels"</span><span data-if="python" style="display:none">"additional_levels"</span></i>:</b></dt>
<dd>
<p>

The number of additional pyramid levels.
The model parameter trained is <i><span data-if="hdevelop" style="display:inline">'additional_levels'</span><span data-if="c" style="display:none">"additional_levels"</span><span data-if="cpp" style="display:none">"additional_levels"</span><span data-if="com" style="display:none">"additional_levels"</span><span data-if="dotnet" style="display:none">"additional_levels"</span><span data-if="python" style="display:none">"additional_levels"</span></i>.
</p>
</dd>
</dl>

</li>
</ul>
<p>It is possible to train several of these parameters in one
call of <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> by passing the generic parameter
<i><span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></i> in a tuple more than once in conjunction with the
corresponding parameters: e.g.,
<a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">['train','train']</span><span data-if="c" style="display:none">["train","train"]</span><span data-if="cpp" style="display:none">["train","train"]</span><span data-if="com" style="display:none">["train","train"]</span><span data-if="dotnet" style="display:none">["train","train"]</span><span data-if="python" style="display:none">["train","train"]</span></i> and
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">['polarity','module_size']</span><span data-if="c" style="display:none">["polarity","module_size"]</span><span data-if="cpp" style="display:none">["polarity","module_size"]</span><span data-if="com" style="display:none">["polarity","module_size"]</span><span data-if="dotnet" style="display:none">["polarity","module_size"]</span><span data-if="python" style="display:none">["polarity","module_size"]</span></i>.
Furthermore, in conjunction with <i><span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></i> = <i><span data-if="hdevelop" style="display:inline">'all'</span><span data-if="c" style="display:none">"all"</span><span data-if="cpp" style="display:none">"all"</span><span data-if="com" style="display:none">"all"</span><span data-if="dotnet" style="display:none">"all"</span><span data-if="python" style="display:none">"all"</span></i>
it is possible to exclude single parameters from training
explicitly again by passing <i><span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></i> more than once.
The names of the parameters to exclude, however, must be prefixed
by <i><span data-if="hdevelop" style="display:inline">'~'</span><span data-if="c" style="display:none">"~"</span><span data-if="cpp" style="display:none">"~"</span><span data-if="com" style="display:none">"~"</span><span data-if="dotnet" style="display:none">"~"</span><span data-if="python" style="display:none">"~"</span></i>:
<a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">['train','train']</span><span data-if="c" style="display:none">["train","train"]</span><span data-if="cpp" style="display:none">["train","train"]</span><span data-if="com" style="display:none">["train","train"]</span><span data-if="dotnet" style="display:none">["train","train"]</span><span data-if="python" style="display:none">["train","train"]</span></i> and
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> =
<i><span data-if="hdevelop" style="display:inline">['all','~contrast']</span><span data-if="c" style="display:none">["all","~contrast"]</span><span data-if="cpp" style="display:none">["all","~contrast"]</span><span data-if="com" style="display:none">["all","~contrast"]</span><span data-if="dotnet" style="display:none">["all","~contrast"]</span><span data-if="python" style="display:none">["all","~contrast"]</span></i>,
e.g., trains all parameters except the minimum contrast.
</p>
<p>For training the model, the following aspects should be considered:
</p>
<ul>

<li>
<p>
To use several images for the training, 该算子
<code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> must be called with the parameter
<i><span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></i> once for every sample image.
</p>
</li>
<li>
<p>
It is also possible to train the model with several symbols in
one image.
Here, the generic parameter <i><span data-if="hdevelop" style="display:inline">'stop_after_result_num'</span><span data-if="c" style="display:none">"stop_after_result_num"</span><span data-if="cpp" style="display:none">"stop_after_result_num"</span><span data-if="com" style="display:none">"stop_after_result_num"</span><span data-if="dotnet" style="display:none">"stop_after_result_num"</span><span data-if="python" style="display:none">"stop_after_result_num"</span></i>
must be passed as a tuple to <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> together with
<i><span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></i>.
The number of symbols in the image is passed in
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> together with the training parameters.
</p>
</li>
<li>
<p>
If the training image contains more symbols than the one that
shall be used for the training the domain of the image should
be reduced to the symbol of interest with <a href="reduce_domain.html"><code><span data-if="hdevelop" style="display:inline">reduce_domain</span><span data-if="c" style="display:none">reduce_domain</span><span data-if="cpp" style="display:none">ReduceDomain</span><span data-if="com" style="display:none">ReduceDomain</span><span data-if="dotnet" style="display:none">ReduceDomain</span><span data-if="python" style="display:none">reduce_domain</span></code></a>.
</p>
</li>
<li>
<p>
In an application with very similar images, <em>one</em> image for
training may be sufficient if the following assumptions are true:
The symbol size (in modules) is the same for all symbols used in
the application, foreground and background modules are of the
same size and there is no gap between neighboring foreground
modules, the background has no distinct texture; and the
contrast of all images is almost the same.
Otherwise, several images should be used for training.
</p>
</li>
<li>
<p>
In applications where the symbol size (in modules) is not fixed,
the smallest as well as the  biggest symbols should be used for
the training.
If this can not be guaranteed, the limits for the symbol size
should be adapted manually after the training, or the symbol
size should entirely be excluded from the training.
</p>
</li>
<li>
<p>
During the first call of <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> in the
training mode, the trained model parameters are restricted to
the properties of the detected symbol.
Any successive training call will, where necessary, extend the
parameter range to cover the already trained symbols as well as
the new symbols.
Resetting the model with <a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a> to one of
its default settings (<i><span data-if="hdevelop" style="display:inline">'default_parameters'</span><span data-if="c" style="display:none">"default_parameters"</span><span data-if="cpp" style="display:none">"default_parameters"</span><span data-if="com" style="display:none">"default_parameters"</span><span data-if="dotnet" style="display:none">"default_parameters"</span><span data-if="python" style="display:none">"default_parameters"</span></i> =
<i><span data-if="hdevelop" style="display:inline">'standard_recognition'</span><span data-if="c" style="display:none">"standard_recognition"</span><span data-if="cpp" style="display:none">"standard_recognition"</span><span data-if="com" style="display:none">"standard_recognition"</span><span data-if="dotnet" style="display:none">"standard_recognition"</span><span data-if="python" style="display:none">"standard_recognition"</span></i>, <i><span data-if="hdevelop" style="display:inline">'enhanced_recognition'</span><span data-if="c" style="display:none">"enhanced_recognition"</span><span data-if="cpp" style="display:none">"enhanced_recognition"</span><span data-if="com" style="display:none">"enhanced_recognition"</span><span data-if="dotnet" style="display:none">"enhanced_recognition"</span><span data-if="python" style="display:none">"enhanced_recognition"</span></i>, or
<i><span data-if="hdevelop" style="display:inline">'maximum_recognition'</span><span data-if="c" style="display:none">"maximum_recognition"</span><span data-if="cpp" style="display:none">"maximum_recognition"</span><span data-if="com" style="display:none">"maximum_recognition"</span><span data-if="dotnet" style="display:none">"maximum_recognition"</span><span data-if="python" style="display:none">"maximum_recognition"</span></i>) will also reset the training
state of the model.
With <a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a> and <i><span data-if="hdevelop" style="display:inline">'trained'</span><span data-if="c" style="display:none">"trained"</span><span data-if="cpp" style="display:none">"trained"</span><span data-if="com" style="display:none">"trained"</span><span data-if="dotnet" style="display:none">"trained"</span><span data-if="python" style="display:none">"trained"</span></i> the training
state of parameters can be set to trained. Subsequent training of this
parameter will not reset its value, but extend it, so symbols readable
by the previous value can still be read after training.
</p>
</li>
<li>
<p>
If <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> is not able to read the
symbol in the training image, this will produce no error or
exception handling.
This can simply be tested in the program by checking the
results of <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code>: <a href="#SymbolXLDs"><i><code><span data-if="hdevelop" style="display:inline">SymbolXLDs</span><span data-if="c" style="display:none">SymbolXLDs</span><span data-if="cpp" style="display:none">SymbolXLDs</span><span data-if="com" style="display:none">SymbolXLDs</span><span data-if="dotnet" style="display:none">symbolXLDs</span><span data-if="python" style="display:none">symbol_xlds</span></code></i></a>,
<a href="#ResultHandles"><i><code><span data-if="hdevelop" style="display:inline">ResultHandles</span><span data-if="c" style="display:none">ResultHandles</span><span data-if="cpp" style="display:none">ResultHandles</span><span data-if="com" style="display:none">ResultHandles</span><span data-if="dotnet" style="display:none">resultHandles</span><span data-if="python" style="display:none">result_handles</span></code></i></a>, <a href="#DecodedDataStrings"><i><code><span data-if="hdevelop" style="display:inline">DecodedDataStrings</span><span data-if="c" style="display:none">DecodedDataStrings</span><span data-if="cpp" style="display:none">DecodedDataStrings</span><span data-if="com" style="display:none">DecodedDataStrings</span><span data-if="dotnet" style="display:none">decodedDataStrings</span><span data-if="python" style="display:none">decoded_data_strings</span></code></i></a>.
These tuples will be empty, and the model will not be modified.
</p>
</li>
</ul>
<p>Note that during training, a possibly set timeout is ignored (see
<a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a>).
</p>
<p><b>Functionality of the symbol search</b>
</p>
<ul>

<li>
<p> All data code types:
</p>
<p>Depending on the current settings of the 2D data code model (see
<a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a>), 该算子
<code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> performs several passes for searching
the data code symbols.
The search starts at the highest pyramid level, where -
according to the maximum module size defined in the data code model
- the modules can be separated.
In addition, in every pyramid level the preprocessing can vary
depending on the presets for the module gap.
If the data code model enables dark symbols on a light background as
well as light symbols on a dark background, within the current pyramid
level, the dark symbols are searched first.
Then the passes for searching light symbols follow.
A pass consists of two phases: The search phase is used to
look for the finder patterns and to generate a symbol candidate for
every detected finder pattern, and the evaluation phase, where in a
lower pyramid level all candidates are investigated and - if
possible - read.
</p>
<p>该算子 call is either terminated after successfully decoding
the requested number of symbols, after processing all search passes,
or due to a timeout (see <a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a>).  The
number of requested symbols can be specified via the generic
parameter <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">'stop_after_result_num'</span><span data-if="c" style="display:none">"stop_after_result_num"</span><span data-if="cpp" style="display:none">"stop_after_result_num"</span><span data-if="com" style="display:none">"stop_after_result_num"</span><span data-if="dotnet" style="display:none">"stop_after_result_num"</span><span data-if="python" style="display:none">"stop_after_result_num"</span></i>.
Without specifying this number the search stops as soon as one
symbol could be decoded.
</p>
</li>
<li>
<p> Data Matrix ECC 200:
</p>
<p>The complexity of the symbol search can be controlled with the
generic parameter <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">'symbol_search'</span><span data-if="c" style="display:none">"symbol_search"</span><span data-if="cpp" style="display:none">"symbol_search"</span><span data-if="com" style="display:none">"symbol_search"</span><span data-if="dotnet" style="display:none">"symbol_search"</span><span data-if="python" style="display:none">"symbol_search"</span></i>.
Per default, <i><span data-if="hdevelop" style="display:inline">'symbol_search'</span><span data-if="c" style="display:none">"symbol_search"</span><span data-if="cpp" style="display:none">"symbol_search"</span><span data-if="com" style="display:none">"symbol_search"</span><span data-if="dotnet" style="display:none">"symbol_search"</span><span data-if="python" style="display:none">"symbol_search"</span></i> is set to
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">'default'</span><span data-if="c" style="display:none">"default"</span><span data-if="cpp" style="display:none">"default"</span><span data-if="com" style="display:none">"default"</span><span data-if="dotnet" style="display:none">"default"</span><span data-if="python" style="display:none">"default"</span></i>.
</p>
<ul>

<li>
<p> For simple images, i.e. images that:
</p>
<ul>

<li>
<p> only contain symbols with high contrast and a large quiet
zone and
</p>
</li>
<li>
<p> show a homogeneous background
</p>
</li>
</ul>

<p>a less complex and (in simple cases) faster symbol search method can
be used by setting <i><span data-if="hdevelop" style="display:inline">'symbol_search'</span><span data-if="c" style="display:none">"symbol_search"</span><span data-if="cpp" style="display:none">"symbol_search"</span><span data-if="com" style="display:none">"symbol_search"</span><span data-if="dotnet" style="display:none">"symbol_search"</span><span data-if="python" style="display:none">"symbol_search"</span></i> to <i><span data-if="hdevelop" style="display:inline">'rudimental'</span><span data-if="c" style="display:none">"rudimental"</span><span data-if="cpp" style="display:none">"rudimental"</span><span data-if="com" style="display:none">"rudimental"</span><span data-if="dotnet" style="display:none">"rudimental"</span><span data-if="python" style="display:none">"rudimental"</span></i>.
Please note that in this case the following
parameters do not have any effect: <i><span data-if="hdevelop" style="display:inline">'module_gap_min'</span><span data-if="c" style="display:none">"module_gap_min"</span><span data-if="cpp" style="display:none">"module_gap_min"</span><span data-if="com" style="display:none">"module_gap_min"</span><span data-if="dotnet" style="display:none">"module_gap_min"</span><span data-if="python" style="display:none">"module_gap_min"</span></i>,
<i><span data-if="hdevelop" style="display:inline">'module_gap_max'</span><span data-if="c" style="display:none">"module_gap_max"</span><span data-if="cpp" style="display:none">"module_gap_max"</span><span data-if="com" style="display:none">"module_gap_max"</span><span data-if="dotnet" style="display:none">"module_gap_max"</span><span data-if="python" style="display:none">"module_gap_max"</span></i>, <i><span data-if="hdevelop" style="display:inline">'module_gap'</span><span data-if="c" style="display:none">"module_gap"</span><span data-if="cpp" style="display:none">"module_gap"</span><span data-if="com" style="display:none">"module_gap"</span><span data-if="dotnet" style="display:none">"module_gap"</span><span data-if="python" style="display:none">"module_gap"</span></i>,
<i><span data-if="hdevelop" style="display:inline">'finder_pattern_tolerance'</span><span data-if="c" style="display:none">"finder_pattern_tolerance"</span><span data-if="cpp" style="display:none">"finder_pattern_tolerance"</span><span data-if="com" style="display:none">"finder_pattern_tolerance"</span><span data-if="dotnet" style="display:none">"finder_pattern_tolerance"</span><span data-if="python" style="display:none">"finder_pattern_tolerance"</span></i>,<i><span data-if="hdevelop" style="display:inline">'contrast_tolerance'</span><span data-if="c" style="display:none">"contrast_tolerance"</span><span data-if="cpp" style="display:none">"contrast_tolerance"</span><span data-if="com" style="display:none">"contrast_tolerance"</span><span data-if="dotnet" style="display:none">"contrast_tolerance"</span><span data-if="python" style="display:none">"contrast_tolerance"</span></i>,
and <i><span data-if="hdevelop" style="display:inline">'candidate_selection'</span><span data-if="c" style="display:none">"candidate_selection"</span><span data-if="cpp" style="display:none">"candidate_selection"</span><span data-if="com" style="display:none">"candidate_selection"</span><span data-if="dotnet" style="display:none">"candidate_selection"</span><span data-if="python" style="display:none">"candidate_selection"</span></i>'.
Further, no parameters can be trained with this method.
</p>
</li>
<li>
<p> For large images with many codes and a highly structured
background, the number of code candidates can be very high for
certain parameter settings, e.g. for <i><span data-if="hdevelop" style="display:inline">'maximum_recognition'</span><span data-if="c" style="display:none">"maximum_recognition"</span><span data-if="cpp" style="display:none">"maximum_recognition"</span><span data-if="com" style="display:none">"maximum_recognition"</span><span data-if="dotnet" style="display:none">"maximum_recognition"</span><span data-if="python" style="display:none">"maximum_recognition"</span></i>.
For performance reasons, the ECC 200 reader stops by default after
10000 processed candidates.
</p>
<p>For cases, where more candidates need to be considered in order to
decode all codes in the image the <i><span data-if="hdevelop" style="display:inline">'symbol_search'</span><span data-if="c" style="display:none">"symbol_search"</span><span data-if="cpp" style="display:none">"symbol_search"</span><span data-if="com" style="display:none">"symbol_search"</span><span data-if="dotnet" style="display:none">"symbol_search"</span><span data-if="python" style="display:none">"symbol_search"</span></i> can be set
to <i><span data-if="hdevelop" style="display:inline">'exhaustive'</span><span data-if="c" style="display:none">"exhaustive"</span><span data-if="cpp" style="display:none">"exhaustive"</span><span data-if="com" style="display:none">"exhaustive"</span><span data-if="dotnet" style="display:none">"exhaustive"</span><span data-if="python" style="display:none">"exhaustive"</span></i>. This will stop the search only when
<i><span data-if="hdevelop" style="display:inline">'stop_after_result_num'</span><span data-if="c" style="display:none">"stop_after_result_num"</span><span data-if="cpp" style="display:none">"stop_after_result_num"</span><span data-if="com" style="display:none">"stop_after_result_num"</span><span data-if="dotnet" style="display:none">"stop_after_result_num"</span><span data-if="python" style="display:none">"stop_after_result_num"</span></i> codes have been decoded or all
candidates have been processed. Please note that this may increase
the runtime accordingly. The actual number of candidates can be
queried with <a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a>.
</p>
</li>
</ul>

</li>
</ul>
<p><b>Query results of the symbol search</b>
</p>
<p>With the result handles and 该算子s
<a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a> and
<a href="get_data_code_2d_objects.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_objects</span><span data-if="c" style="display:none">get_data_code_2d_objects</span><span data-if="cpp" style="display:none">GetDataCode2dObjects</span><span data-if="com" style="display:none">GetDataCode2dObjects</span><span data-if="dotnet" style="display:none">GetDataCode2dObjects</span><span data-if="python" style="display:none">get_data_code_2d_objects</span></code></a>, additional data can be requested
about the search process, e.g., the number of internal search passes
or the number of investigated candidates, and - together with
the <a href="#ResultHandles"><i><code><span data-if="hdevelop" style="display:inline">ResultHandles</span><span data-if="c" style="display:none">ResultHandles</span><span data-if="cpp" style="display:none">ResultHandles</span><span data-if="com" style="display:none">ResultHandles</span><span data-if="dotnet" style="display:none">resultHandles</span><span data-if="python" style="display:none">result_handles</span></code></i></a> - about the symbols, like the symbol
and module size, the contrast, or the raw data coded in the symbol.
In addition, these operators provide information about all
investigated candidates that could not be read.
In particular, this helps to determine if a candidate was actually
generated at the symbol's position during the preprocessing and
- by the value of a status variable - why the search or
reading was aborted.
Further information about the parameters can be found with the
operators <a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a> and
<a href="get_data_code_2d_objects.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_objects</span><span data-if="c" style="display:none">get_data_code_2d_objects</span><span data-if="cpp" style="display:none">GetDataCode2dObjects</span><span data-if="com" style="display:none">GetDataCode2dObjects</span><span data-if="dotnet" style="display:none">GetDataCode2dObjects</span><span data-if="python" style="display:none">get_data_code_2d_objects</span></code></a>.
</p>
<p><b>Timeout and Abort</b>
</p>
<p>该算子 <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> can be aborted by a timeout and
dynamically. With 该算子 <a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a> you can
specify a timeout. If <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> reaches this timeout, it
returns all codes decoded so far. Alternatively, you can call
<a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a> with <i><span data-if="hdevelop" style="display:inline">'abort'</span><span data-if="c" style="display:none">"abort"</span><span data-if="cpp" style="display:none">"abort"</span><span data-if="com" style="display:none">"abort"</span><span data-if="dotnet" style="display:none">"abort"</span><span data-if="python" style="display:none">"abort"</span></i> from another thread to
abort <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> dynamically. </p>
<p>
The information whether 该算子 was aborted or not can be queried by
calling <a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a> with the parameter <i><span data-if="hdevelop" style="display:inline">'aborted'</span><span data-if="c" style="display:none">"aborted"</span><span data-if="cpp" style="display:none">"aborted"</span><span data-if="com" style="display:none">"aborted"</span><span data-if="dotnet" style="display:none">"aborted"</span><span data-if="python" style="display:none">"aborted"</span></i>. </p>
<p>
Furthermore, 该算子 <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> can be canceled, which
means no result is returned but instead an error is returned. This can be done
with 该算子 <a href="set_operator_timeout.html"><code><span data-if="hdevelop" style="display:inline">set_operator_timeout</span><span data-if="c" style="display:none">set_operator_timeout</span><span data-if="cpp" style="display:none">SetOperatorTimeout</span><span data-if="com" style="display:none">SetOperatorTimeout</span><span data-if="dotnet" style="display:none">SetOperatorTimeout</span><span data-if="python" style="display:none">set_operator_timeout</span></code></a> or <a href="interrupt_operator.html"><code><span data-if="hdevelop" style="display:inline">interrupt_operator</span><span data-if="c" style="display:none">interrupt_operator</span><span data-if="cpp" style="display:none">InterruptOperator</span><span data-if="com" style="display:none">InterruptOperator</span><span data-if="dotnet" style="display:none">InterruptOperator</span><span data-if="python" style="display:none">interrupt_operator</span></code></a>.
If <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> is canceled by <a href="set_operator_timeout.html"><code><span data-if="hdevelop" style="display:inline">set_operator_timeout</span><span data-if="c" style="display:none">set_operator_timeout</span><span data-if="cpp" style="display:none">SetOperatorTimeout</span><span data-if="com" style="display:none">SetOperatorTimeout</span><span data-if="dotnet" style="display:none">SetOperatorTimeout</span><span data-if="python" style="display:none">set_operator_timeout</span></code></a>,
H_ERR_TIMEOUT (9400) is returned. If <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> is
canceled by <a href="interrupt_operator.html"><code><span data-if="hdevelop" style="display:inline">interrupt_operator</span><span data-if="c" style="display:none">interrupt_operator</span><span data-if="cpp" style="display:none">InterruptOperator</span><span data-if="com" style="display:none">InterruptOperator</span><span data-if="dotnet" style="display:none">InterruptOperator</span><span data-if="python" style="display:none">interrupt_operator</span></code></a>, H_ERR_CANCEL (22) is returned.
Note: Both mentioned operators are only supported in cancel mode.
</p>
<p><b>Special parallelization for Data Matrix ECC 200</b>
</p>
<p>该算子 <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> supports special parallelization
features for Data Matrix ECC 200. This additional internal parallelization
can lead to a significantly shorter execution time under certain
circumstances. In general, faster calculation times can be expected if,
e.g., <a href="set_data_code_2d_param.html"><code><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></code></a> is used to set the value <i><span data-if="hdevelop" style="display:inline">'any'</span><span data-if="c" style="display:none">"any"</span><span data-if="cpp" style="display:none">"any"</span><span data-if="com" style="display:none">"any"</span><span data-if="dotnet" style="display:none">"any"</span><span data-if="python" style="display:none">"any"</span></i>
for one or more of the parameters <i><span data-if="hdevelop" style="display:inline">'polarity'</span><span data-if="c" style="display:none">"polarity"</span><span data-if="cpp" style="display:none">"polarity"</span><span data-if="com" style="display:none">"polarity"</span><span data-if="dotnet" style="display:none">"polarity"</span><span data-if="python" style="display:none">"polarity"</span></i>, <i><span data-if="hdevelop" style="display:inline">'contrast_tolerance'</span><span data-if="c" style="display:none">"contrast_tolerance"</span><span data-if="cpp" style="display:none">"contrast_tolerance"</span><span data-if="com" style="display:none">"contrast_tolerance"</span><span data-if="dotnet" style="display:none">"contrast_tolerance"</span><span data-if="python" style="display:none">"contrast_tolerance"</span></i>
and <i><span data-if="hdevelop" style="display:inline">'finder_pattern_tolerance'</span><span data-if="c" style="display:none">"finder_pattern_tolerance"</span><span data-if="cpp" style="display:none">"finder_pattern_tolerance"</span><span data-if="com" style="display:none">"finder_pattern_tolerance"</span><span data-if="dotnet" style="display:none">"finder_pattern_tolerance"</span><span data-if="python" style="display:none">"finder_pattern_tolerance"</span></i>, or if the set values for
<i><span data-if="hdevelop" style="display:inline">'module_gap_min'</span><span data-if="c" style="display:none">"module_gap_min"</span><span data-if="cpp" style="display:none">"module_gap_min"</span><span data-if="com" style="display:none">"module_gap_min"</span><span data-if="dotnet" style="display:none">"module_gap_min"</span><span data-if="python" style="display:none">"module_gap_min"</span></i> and <i><span data-if="hdevelop" style="display:inline">'module_gap_max'</span><span data-if="c" style="display:none">"module_gap_max"</span><span data-if="cpp" style="display:none">"module_gap_max"</span><span data-if="com" style="display:none">"module_gap_max"</span><span data-if="dotnet" style="display:none">"module_gap_max"</span><span data-if="python" style="display:none">"module_gap_max"</span></i> differ. In all these cases,
a series of parameter values must be taken into account. This applies in particular
if <i><span data-if="hdevelop" style="display:inline">'default_parameters'</span><span data-if="c" style="display:none">"default_parameters"</span><span data-if="cpp" style="display:none">"default_parameters"</span><span data-if="com" style="display:none">"default_parameters"</span><span data-if="dotnet" style="display:none">"default_parameters"</span><span data-if="python" style="display:none">"default_parameters"</span></i> has been set to <i><span data-if="hdevelop" style="display:inline">'enhanced_recognition'</span><span data-if="c" style="display:none">"enhanced_recognition"</span><span data-if="cpp" style="display:none">"enhanced_recognition"</span><span data-if="com" style="display:none">"enhanced_recognition"</span><span data-if="dotnet" style="display:none">"enhanced_recognition"</span><span data-if="python" style="display:none">"enhanced_recognition"</span></i>
or <i><span data-if="hdevelop" style="display:inline">'maximum_recognition'</span><span data-if="c" style="display:none">"maximum_recognition"</span><span data-if="cpp" style="display:none">"maximum_recognition"</span><span data-if="com" style="display:none">"maximum_recognition"</span><span data-if="dotnet" style="display:none">"maximum_recognition"</span><span data-if="python" style="display:none">"maximum_recognition"</span></i>.
</p>
<p>Please note, that the memory consumption increases with the number of parallel
running threads. To reduce the memory consumption <a href="set_system.html"><code><span data-if="hdevelop" style="display:inline">set_system</span><span data-if="c" style="display:none">set_system</span><span data-if="cpp" style="display:none">SetSystem</span><span data-if="com" style="display:none">SetSystem</span><span data-if="dotnet" style="display:none">SetSystem</span><span data-if="python" style="display:none">set_system</span></code></a> can be used
to either set the number of threads with the parameter <i><span data-if="hdevelop" style="display:inline">'thread_num'</span><span data-if="c" style="display:none">"thread_num"</span><span data-if="cpp" style="display:none">"thread_num"</span><span data-if="com" style="display:none">"thread_num"</span><span data-if="dotnet" style="display:none">"thread_num"</span><span data-if="python" style="display:none">"thread_num"</span></i>, or
to switch off the temporary memory cache with the parameter <i><span data-if="hdevelop" style="display:inline">'temporary_mem_cache'</span><span data-if="c" style="display:none">"temporary_mem_cache"</span><span data-if="cpp" style="display:none">"temporary_mem_cache"</span><span data-if="com" style="display:none">"temporary_mem_cache"</span><span data-if="dotnet" style="display:none">"temporary_mem_cache"</span><span data-if="python" style="display:none">"temporary_mem_cache"</span></i>.
The Data Matrix ECC 200 specific parallelization can also be easily disabled
by setting the generic parameter <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> = <i><span data-if="hdevelop" style="display:inline">'specific_parallelization'</span><span data-if="c" style="display:none">"specific_parallelization"</span><span data-if="cpp" style="display:none">"specific_parallelization"</span><span data-if="com" style="display:none">"specific_parallelization"</span><span data-if="dotnet" style="display:none">"specific_parallelization"</span><span data-if="python" style="display:none">"specific_parallelization"</span></i>
to <i><span data-if="hdevelop" style="display:inline">'disable'</span><span data-if="c" style="display:none">"disable"</span><span data-if="cpp" style="display:none">"disable"</span><span data-if="com" style="display:none">"disable"</span><span data-if="dotnet" style="display:none">"disable"</span><span data-if="python" style="display:none">"disable"</span></i>. Note that this will only switch off the additional internal
parallelization for Data Matrix ECC 200. Certain sub-tasks might be still
processed in parallel. For more information on how to disable the entire
parallelization, see 该算子 reference of <a href="set_system.html"><code><span data-if="hdevelop" style="display:inline">set_system</span><span data-if="c" style="display:none">set_system</span><span data-if="cpp" style="display:none">SetSystem</span><span data-if="com" style="display:none">SetSystem</span><span data-if="dotnet" style="display:none">SetSystem</span><span data-if="python" style="display:none">set_system</span></code></a> with its
parameters <i><span data-if="hdevelop" style="display:inline">'thread_num'</span><span data-if="c" style="display:none">"thread_num"</span><span data-if="cpp" style="display:none">"thread_num"</span><span data-if="com" style="display:none">"thread_num"</span><span data-if="dotnet" style="display:none">"thread_num"</span><span data-if="python" style="display:none">"thread_num"</span></i> and <i><span data-if="hdevelop" style="display:inline">'parallelize_operators'</span><span data-if="c" style="display:none">"parallelize_operators"</span><span data-if="cpp" style="display:none">"parallelize_operators"</span><span data-if="com" style="display:none">"parallelize_operators"</span><span data-if="dotnet" style="display:none">"parallelize_operators"</span><span data-if="python" style="display:none">"parallelize_operators"</span></i>. In general,
however, it should not be necessary to switch off the specific parallelization.
Per default, <i><span data-if="hdevelop" style="display:inline">'specific_parallelization'</span><span data-if="c" style="display:none">"specific_parallelization"</span><span data-if="cpp" style="display:none">"specific_parallelization"</span><span data-if="com" style="display:none">"specific_parallelization"</span><span data-if="dotnet" style="display:none">"specific_parallelization"</span><span data-if="python" style="display:none">"specific_parallelization"</span></i> is set to <i><span data-if="hdevelop" style="display:inline">'enable'</span><span data-if="c" style="display:none">"enable"</span><span data-if="cpp" style="display:none">"enable"</span><span data-if="com" style="display:none">"enable"</span><span data-if="dotnet" style="display:none">"enable"</span><span data-if="python" style="display:none">"enable"</span></i>.
</p>
<p><b>Chinese characters</b>
</p>
<p>If a QR Code contains Chinese characters encoded according to the
Chinese national standard GBT 18284-2000, <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code>
returns these characters UTF-8 encoded in <a href="#DecodedDataStrings"><i><code><span data-if="hdevelop" style="display:inline">DecodedDataStrings</span><span data-if="c" style="display:none">DecodedDataStrings</span><span data-if="cpp" style="display:none">DecodedDataStrings</span><span data-if="com" style="display:none">DecodedDataStrings</span><span data-if="dotnet" style="display:none">decodedDataStrings</span><span data-if="python" style="display:none">decoded_data_strings</span></code></i></a>, if
the system parameter <i><span data-if="hdevelop" style="display:inline">'filename_encoding'</span><span data-if="c" style="display:none">"filename_encoding"</span><span data-if="cpp" style="display:none">"filename_encoding"</span><span data-if="com" style="display:none">"filename_encoding"</span><span data-if="dotnet" style="display:none">"filename_encoding"</span><span data-if="python" style="display:none">"filename_encoding"</span></i> is set to <i><span data-if="hdevelop" style="display:inline">'utf8'</span><span data-if="c" style="display:none">"utf8"</span><span data-if="cpp" style="display:none">"utf8"</span><span data-if="com" style="display:none">"utf8"</span><span data-if="dotnet" style="display:none">"utf8"</span><span data-if="python" style="display:none">"utf8"</span></i>.
The contents of <i><span data-if="hdevelop" style="display:inline">'decoded_data'</span><span data-if="c" style="display:none">"decoded_data"</span><span data-if="cpp" style="display:none">"decoded_data"</span><span data-if="com" style="display:none">"decoded_data"</span><span data-if="dotnet" style="display:none">"decoded_data"</span><span data-if="python" style="display:none">"decoded_data"</span></i>, which can be retrieved with
<a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a>, are never converted to UTF-8.
</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>多线程类型:可重入(与非独占操作符并行运行)。</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  
    <li>Automatically parallelized on internal data level.</li>
  
</ul>
<p>This operator supports canceling timeouts and interrupts.</p>
<p>This operator modifies the state of the following input parameter:</p>
<ul><li><a href="#DataCodeHandle"><span data-if="hdevelop" style="display:inline">DataCodeHandle</span><span data-if="c" style="display:none">DataCodeHandle</span><span data-if="cpp" style="display:none">DataCodeHandle</span><span data-if="com" style="display:none">DataCodeHandle</span><span data-if="dotnet" style="display:none">dataCodeHandle</span><span data-if="python" style="display:none">data_code_handle</span></a></li></ul>
<p>During execution of this operator, access to the value of this parameter must be synchronized if it is used across multiple threads.</p>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="Image" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Image</span><span data-if="c" style="display:none">Image</span><span data-if="cpp" style="display:none">Image</span><span data-if="com" style="display:none">Image</span><span data-if="dotnet" style="display:none">image</span><span data-if="python" style="display:none">image</span></code></b> (input_object)  </span><span>singlechannelimage <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject</span> (byte)</span>
</div>
<p class="pardesc">Input image. If the image has a reduced domain, the data code
search is reduced to that domain. This usually reduces the runtime of the
operator. However, if the datacode is not fully inside the domain, the
datacode might not be found correctly.
In rare cases, data codes may be found outside the domain. If these results
are undesirable, they have to be subsequently eliminated.
</p>
</div>
  <div class="par">
<div class="parhead">
<span id="SymbolXLDs" class="parname"><b><code><span data-if="hdevelop" style="display:inline">SymbolXLDs</span><span data-if="c" style="display:none">SymbolXLDs</span><span data-if="cpp" style="display:none">SymbolXLDs</span><span data-if="com" style="display:none">SymbolXLDs</span><span data-if="dotnet" style="display:none">symbolXLDs</span><span data-if="python" style="display:none">symbol_xlds</span></code></b> (output_object)  </span><span>xld_cont(-array) <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HXLDCont.html">HXLDCont</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HXLDCont.html">HXLDCont</a></span><span data-if="c" style="display:none">Hobject *</span></span>
</div>
<p class="pardesc">XLD contours that surround the successfully decoded data
code symbols. The order of the contour points reflects the
orientation of the detected symbols. The contours begin in
the top left corner (see <i><span data-if="hdevelop" style="display:inline">'orientation'</span><span data-if="c" style="display:none">"orientation"</span><span data-if="cpp" style="display:none">"orientation"</span><span data-if="com" style="display:none">"orientation"</span><span data-if="dotnet" style="display:none">"orientation"</span><span data-if="python" style="display:none">"orientation"</span></i> in the
reference of <a href="get_data_code_2d_results.html"><code><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></code></a>) and
continue clockwise.
<br>
<div style="text-align:left">
<div style="text-align:left;" class="figure">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" width="158.4" height="174.6" customscale="0.6">
<g style="stroke-width:.025in; fill:yellow">
<image xlink:href=" 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 " preserveAspectRatio="none" x="0" y="0" width="100%" height="100%"></image>
</g>
</svg><div style="margin-bottom:30px;text-align:left;" class="caption">
Order of points of <a href="#SymbolXLDs"><i><code><span data-if="hdevelop" style="display:inline">SymbolXLDs</span><span data-if="c" style="display:none">SymbolXLDs</span><span data-if="cpp" style="display:none">SymbolXLDs</span><span data-if="com" style="display:none">SymbolXLDs</span><span data-if="dotnet" style="display:none">symbolXLDs</span><span data-if="python" style="display:none">symbol_xlds</span></code></i></a>
</div>
</div>
</div>
<span title="1" style="vertical-align:-0.0991602em" class="math"><!-- Created by MetaPost 1.902 on 2023.05.15:2033 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="0.125999em" height="0.573321em" viewBox="0 0 2.015991 9.173141">
<!-- Original BoundingBox: -1.007996 -4.586578 1.007996 4.586563 -->
</svg></span>
</p>
</div>
  <div class="par">
<div class="parhead">
<span id="DataCodeHandle" class="parname"><b><code><span data-if="hdevelop" style="display:inline">DataCodeHandle</span><span data-if="c" style="display:none">DataCodeHandle</span><span data-if="cpp" style="display:none">DataCodeHandle</span><span data-if="com" style="display:none">DataCodeHandle</span><span data-if="dotnet" style="display:none">dataCodeHandle</span><span data-if="python" style="display:none">data_code_handle</span></code></b> (input_control, state is modified)  </span><span>datacode_2d <code>→</code> <span data-if="dotnet" style="display:none"><a href="HDataCode2D.html">HDataCode2D</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">HHandle</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (handle)</span><span data-if="dotnet" style="display:none"> (<i>IntPtr</i>)</span><span data-if="cpp" style="display:none"> (<i>HHandle</i>)</span><span data-if="c" style="display:none"> (<i>handle</i>)</span></span>
</div>
<p class="pardesc">Handle of the 2D data code model.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="GenParamName" class="parname"><b><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></b> (input_control)  </span><span>attribute.name(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Names of (optional) parameters for
controlling the behavior of 该算子.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>[]</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'specific_parallelization'</span><span data-if="c" style="display:none">"specific_parallelization"</span><span data-if="cpp" style="display:none">"specific_parallelization"</span><span data-if="com" style="display:none">"specific_parallelization"</span><span data-if="dotnet" style="display:none">"specific_parallelization"</span><span data-if="python" style="display:none">"specific_parallelization"</span>, <span data-if="hdevelop" style="display:inline">'stop_after_result_num'</span><span data-if="c" style="display:none">"stop_after_result_num"</span><span data-if="cpp" style="display:none">"stop_after_result_num"</span><span data-if="com" style="display:none">"stop_after_result_num"</span><span data-if="dotnet" style="display:none">"stop_after_result_num"</span><span data-if="python" style="display:none">"stop_after_result_num"</span>, <span data-if="hdevelop" style="display:inline">'symbol_search'</span><span data-if="c" style="display:none">"symbol_search"</span><span data-if="cpp" style="display:none">"symbol_search"</span><span data-if="com" style="display:none">"symbol_search"</span><span data-if="dotnet" style="display:none">"symbol_search"</span><span data-if="python" style="display:none">"symbol_search"</span>, <span data-if="hdevelop" style="display:inline">'train'</span><span data-if="c" style="display:none">"train"</span><span data-if="cpp" style="display:none">"train"</span><span data-if="com" style="display:none">"train"</span><span data-if="dotnet" style="display:none">"train"</span><span data-if="python" style="display:none">"train"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="GenParamValue" class="parname"><b><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></b> (input_control)  </span><span>attribute.value(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[Union[int, float, str]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer / </span><span data-if="hdevelop" style="display:inline">real / </span><span data-if="hdevelop" style="display:inline">string)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long / </span><span data-if="dotnet" style="display:none">double / </span><span data-if="dotnet" style="display:none">string)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i> / </span><span data-if="cpp" style="display:none">double / </span><span data-if="cpp" style="display:none">HString)</span><span data-if="c" style="display:none"> (<i>Hlong</i> / </span><span data-if="c" style="display:none">double / </span><span data-if="c" style="display:none">char*)</span></span>
</div>
<p class="pardesc">Values of the optional generic parameters.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>[]</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">'all'</span><span data-if="c" style="display:none">"all"</span><span data-if="cpp" style="display:none">"all"</span><span data-if="com" style="display:none">"all"</span><span data-if="dotnet" style="display:none">"all"</span><span data-if="python" style="display:none">"all"</span>, <span data-if="hdevelop" style="display:inline">'model_type'</span><span data-if="c" style="display:none">"model_type"</span><span data-if="cpp" style="display:none">"model_type"</span><span data-if="com" style="display:none">"model_type"</span><span data-if="dotnet" style="display:none">"model_type"</span><span data-if="python" style="display:none">"model_type"</span>, <span data-if="hdevelop" style="display:inline">'symbol_size'</span><span data-if="c" style="display:none">"symbol_size"</span><span data-if="cpp" style="display:none">"symbol_size"</span><span data-if="com" style="display:none">"symbol_size"</span><span data-if="dotnet" style="display:none">"symbol_size"</span><span data-if="python" style="display:none">"symbol_size"</span>, <span data-if="hdevelop" style="display:inline">'version'</span><span data-if="c" style="display:none">"version"</span><span data-if="cpp" style="display:none">"version"</span><span data-if="com" style="display:none">"version"</span><span data-if="dotnet" style="display:none">"version"</span><span data-if="python" style="display:none">"version"</span>, <span data-if="hdevelop" style="display:inline">'module_size'</span><span data-if="c" style="display:none">"module_size"</span><span data-if="cpp" style="display:none">"module_size"</span><span data-if="com" style="display:none">"module_size"</span><span data-if="dotnet" style="display:none">"module_size"</span><span data-if="python" style="display:none">"module_size"</span>, <span data-if="hdevelop" style="display:inline">'small_modules_robustness'</span><span data-if="c" style="display:none">"small_modules_robustness"</span><span data-if="cpp" style="display:none">"small_modules_robustness"</span><span data-if="com" style="display:none">"small_modules_robustness"</span><span data-if="dotnet" style="display:none">"small_modules_robustness"</span><span data-if="python" style="display:none">"small_modules_robustness"</span>, <span data-if="hdevelop" style="display:inline">'module_shape'</span><span data-if="c" style="display:none">"module_shape"</span><span data-if="cpp" style="display:none">"module_shape"</span><span data-if="com" style="display:none">"module_shape"</span><span data-if="dotnet" style="display:none">"module_shape"</span><span data-if="python" style="display:none">"module_shape"</span>, <span data-if="hdevelop" style="display:inline">'polarity'</span><span data-if="c" style="display:none">"polarity"</span><span data-if="cpp" style="display:none">"polarity"</span><span data-if="com" style="display:none">"polarity"</span><span data-if="dotnet" style="display:none">"polarity"</span><span data-if="python" style="display:none">"polarity"</span>, <span data-if="hdevelop" style="display:inline">'mirrored'</span><span data-if="c" style="display:none">"mirrored"</span><span data-if="cpp" style="display:none">"mirrored"</span><span data-if="com" style="display:none">"mirrored"</span><span data-if="dotnet" style="display:none">"mirrored"</span><span data-if="python" style="display:none">"mirrored"</span>, <span data-if="hdevelop" style="display:inline">'contrast'</span><span data-if="c" style="display:none">"contrast"</span><span data-if="cpp" style="display:none">"contrast"</span><span data-if="com" style="display:none">"contrast"</span><span data-if="dotnet" style="display:none">"contrast"</span><span data-if="python" style="display:none">"contrast"</span>, <span data-if="hdevelop" style="display:inline">'candidate_selection'</span><span data-if="c" style="display:none">"candidate_selection"</span><span data-if="cpp" style="display:none">"candidate_selection"</span><span data-if="com" style="display:none">"candidate_selection"</span><span data-if="dotnet" style="display:none">"candidate_selection"</span><span data-if="python" style="display:none">"candidate_selection"</span>, <span data-if="hdevelop" style="display:inline">'module_grid'</span><span data-if="c" style="display:none">"module_grid"</span><span data-if="cpp" style="display:none">"module_grid"</span><span data-if="com" style="display:none">"module_grid"</span><span data-if="dotnet" style="display:none">"module_grid"</span><span data-if="python" style="display:none">"module_grid"</span>, <span data-if="hdevelop" style="display:inline">'finder_pattern_tolerance'</span><span data-if="c" style="display:none">"finder_pattern_tolerance"</span><span data-if="cpp" style="display:none">"finder_pattern_tolerance"</span><span data-if="com" style="display:none">"finder_pattern_tolerance"</span><span data-if="dotnet" style="display:none">"finder_pattern_tolerance"</span><span data-if="python" style="display:none">"finder_pattern_tolerance"</span>, <span data-if="hdevelop" style="display:inline">'contrast_tolerance'</span><span data-if="c" style="display:none">"contrast_tolerance"</span><span data-if="cpp" style="display:none">"contrast_tolerance"</span><span data-if="com" style="display:none">"contrast_tolerance"</span><span data-if="dotnet" style="display:none">"contrast_tolerance"</span><span data-if="python" style="display:none">"contrast_tolerance"</span>, <span data-if="hdevelop" style="display:inline">'additional_levels'</span><span data-if="c" style="display:none">"additional_levels"</span><span data-if="cpp" style="display:none">"additional_levels"</span><span data-if="com" style="display:none">"additional_levels"</span><span data-if="dotnet" style="display:none">"additional_levels"</span><span data-if="python" style="display:none">"additional_levels"</span>, <span data-if="hdevelop" style="display:inline">'image_proc'</span><span data-if="c" style="display:none">"image_proc"</span><span data-if="cpp" style="display:none">"image_proc"</span><span data-if="com" style="display:none">"image_proc"</span><span data-if="dotnet" style="display:none">"image_proc"</span><span data-if="python" style="display:none">"image_proc"</span>, <span data-if="hdevelop" style="display:inline">'rudimental'</span><span data-if="c" style="display:none">"rudimental"</span><span data-if="cpp" style="display:none">"rudimental"</span><span data-if="com" style="display:none">"rudimental"</span><span data-if="dotnet" style="display:none">"rudimental"</span><span data-if="python" style="display:none">"rudimental"</span>, <span data-if="hdevelop" style="display:inline">'default'</span><span data-if="c" style="display:none">"default"</span><span data-if="cpp" style="display:none">"default"</span><span data-if="com" style="display:none">"default"</span><span data-if="dotnet" style="display:none">"default"</span><span data-if="python" style="display:none">"default"</span>, <span data-if="hdevelop" style="display:inline">'exhaustive'</span><span data-if="c" style="display:none">"exhaustive"</span><span data-if="cpp" style="display:none">"exhaustive"</span><span data-if="com" style="display:none">"exhaustive"</span><span data-if="dotnet" style="display:none">"exhaustive"</span><span data-if="python" style="display:none">"exhaustive"</span>, 1, 2, 3, <span data-if="hdevelop" style="display:inline">'enable'</span><span data-if="c" style="display:none">"enable"</span><span data-if="cpp" style="display:none">"enable"</span><span data-if="com" style="display:none">"enable"</span><span data-if="dotnet" style="display:none">"enable"</span><span data-if="python" style="display:none">"enable"</span>, <span data-if="hdevelop" style="display:inline">'disable'</span><span data-if="c" style="display:none">"disable"</span><span data-if="cpp" style="display:none">"disable"</span><span data-if="com" style="display:none">"disable"</span><span data-if="dotnet" style="display:none">"disable"</span><span data-if="python" style="display:none">"disable"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="ResultHandles" class="parname"><b><code><span data-if="hdevelop" style="display:inline">ResultHandles</span><span data-if="c" style="display:none">ResultHandles</span><span data-if="cpp" style="display:none">ResultHandles</span><span data-if="com" style="display:none">ResultHandles</span><span data-if="dotnet" style="display:none">resultHandles</span><span data-if="python" style="display:none">result_handles</span></code></b> (output_control)  </span><span>integer(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[int]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Handles of all successfully decoded 2D data code
symbols.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="DecodedDataStrings" class="parname"><b><code><span data-if="hdevelop" style="display:inline">DecodedDataStrings</span><span data-if="c" style="display:none">DecodedDataStrings</span><span data-if="cpp" style="display:none">DecodedDataStrings</span><span data-if="com" style="display:none">DecodedDataStrings</span><span data-if="dotnet" style="display:none">decodedDataStrings</span><span data-if="python" style="display:none">decoded_data_strings</span></code></b> (output_control)  </span><span>string(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Decoded data strings of all detected 2D data code
symbols in the image.</p>
</div>
<h2 id="sec_example_all">例程 (HDevelop)</h2>
<pre class="example">
* Examples showing the use of find_data_code_2d.
* First, 该算子 is used to train the model, afterwards it is used to
* read the symbol in another image.

* Create a model for reading Data matrix ECC 200 codes
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
* Read a training image
read_image (Image, 'datacode/ecc200/ecc200_cpu_007')
* Train the model with the symbol in the image
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, 'train', 'all', \
                   ResultHandles, DecodedDataStrings)
*
* End of training / begin of normal application
*

* Read an image
read_image (Image, 'datacode/ecc200/ecc200_cpu_010')
* Read the symbol in the image
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \
                   ResultHandles, DecodedDataStrings)

* Display all symbols, the strings encoded in them, and the module size
dev_set_color ('green')
for i := 0 to |ResultHandles| - 1 by 1
    select_obj (SymbolXLDs, SymbolXLD, i+1)
    dev_display (SymbolXLD)
    get_contour_xld (SymbolXLD, Row, Col)
    set_tposition (WindowHandle, max(Row), min(Col))
    write_string (WindowHandle, DecodedDataStrings[i])
    get_data_code_2d_results (DataCodeHandle, ResultHandles[i], \
                              ['module_height','module_width'], ModuleSize)
    new_line (WindowHandle)
    write_string (WindowHandle, 'module size = ' + ModuleSize[0] + 'x' + \
                                 ModuleSize[1])
endfor

* Clear the model
clear_data_code_2d_model (DataCodeHandle)
</pre>
<h2 id="sec_result">结果</h2>
<p>该算子 <code><span data-if="hdevelop" style="display:inline">find_data_code_2d</span><span data-if="c" style="display:none">find_data_code_2d</span><span data-if="cpp" style="display:none">FindDataCode2d</span><span data-if="com" style="display:none">FindDataCode2d</span><span data-if="dotnet" style="display:none">FindDataCode2d</span><span data-if="python" style="display:none">find_data_code_2d</span></code> 返回值 <TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
    
if the given parameters are correct.
Otherwise, an exception is raised.</p>
<h2 id="sec_predecessors">可能的前置算子</h2>
<p>
<code><a href="create_data_code_2d_model.html"><span data-if="hdevelop" style="display:inline">create_data_code_2d_model</span><span data-if="c" style="display:none">create_data_code_2d_model</span><span data-if="cpp" style="display:none">CreateDataCode2dModel</span><span data-if="com" style="display:none">CreateDataCode2dModel</span><span data-if="dotnet" style="display:none">CreateDataCode2dModel</span><span data-if="python" style="display:none">create_data_code_2d_model</span></a></code>, 
<code><a href="read_data_code_2d_model.html"><span data-if="hdevelop" style="display:inline">read_data_code_2d_model</span><span data-if="c" style="display:none">read_data_code_2d_model</span><span data-if="cpp" style="display:none">ReadDataCode2dModel</span><span data-if="com" style="display:none">ReadDataCode2dModel</span><span data-if="dotnet" style="display:none">ReadDataCode2dModel</span><span data-if="python" style="display:none">read_data_code_2d_model</span></a></code>, 
<code><a href="set_data_code_2d_param.html"><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></a></code>
</p>
<h2 id="sec_successors">可能的后置算子</h2>
<p>
<code><a href="get_data_code_2d_results.html"><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></a></code>, 
<code><a href="get_data_code_2d_objects.html"><span data-if="hdevelop" style="display:inline">get_data_code_2d_objects</span><span data-if="c" style="display:none">get_data_code_2d_objects</span><span data-if="cpp" style="display:none">GetDataCode2dObjects</span><span data-if="com" style="display:none">GetDataCode2dObjects</span><span data-if="dotnet" style="display:none">GetDataCode2dObjects</span><span data-if="python" style="display:none">get_data_code_2d_objects</span></a></code>, 
<code><a href="write_data_code_2d_model.html"><span data-if="hdevelop" style="display:inline">write_data_code_2d_model</span><span data-if="c" style="display:none">write_data_code_2d_model</span><span data-if="cpp" style="display:none">WriteDataCode2dModel</span><span data-if="com" style="display:none">WriteDataCode2dModel</span><span data-if="dotnet" style="display:none">WriteDataCode2dModel</span><span data-if="python" style="display:none">write_data_code_2d_model</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="create_data_code_2d_model.html"><span data-if="hdevelop" style="display:inline">create_data_code_2d_model</span><span data-if="c" style="display:none">create_data_code_2d_model</span><span data-if="cpp" style="display:none">CreateDataCode2dModel</span><span data-if="com" style="display:none">CreateDataCode2dModel</span><span data-if="dotnet" style="display:none">CreateDataCode2dModel</span><span data-if="python" style="display:none">create_data_code_2d_model</span></a></code>, 
<code><a href="set_data_code_2d_param.html"><span data-if="hdevelop" style="display:inline">set_data_code_2d_param</span><span data-if="c" style="display:none">set_data_code_2d_param</span><span data-if="cpp" style="display:none">SetDataCode2dParam</span><span data-if="com" style="display:none">SetDataCode2dParam</span><span data-if="dotnet" style="display:none">SetDataCode2dParam</span><span data-if="python" style="display:none">set_data_code_2d_param</span></a></code>, 
<code><a href="get_data_code_2d_results.html"><span data-if="hdevelop" style="display:inline">get_data_code_2d_results</span><span data-if="c" style="display:none">get_data_code_2d_results</span><span data-if="cpp" style="display:none">GetDataCode2dResults</span><span data-if="com" style="display:none">GetDataCode2dResults</span><span data-if="dotnet" style="display:none">GetDataCode2dResults</span><span data-if="python" style="display:none">get_data_code_2d_results</span></a></code>, 
<code><a href="get_data_code_2d_objects.html"><span data-if="hdevelop" style="display:inline">get_data_code_2d_objects</span><span data-if="c" style="display:none">get_data_code_2d_objects</span><span data-if="cpp" style="display:none">GetDataCode2dObjects</span><span data-if="com" style="display:none">GetDataCode2dObjects</span><span data-if="dotnet" style="display:none">GetDataCode2dObjects</span><span data-if="python" style="display:none">get_data_code_2d_objects</span></a></code>
</p>
<h2 id="sec_references">References</h2>
<p>

GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.
<br>

</p>
<h2 id="sec_module">模块</h2>
<p>
Data Code</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
